package com.py.credit.dao;

import com.py.credit.common.Page;
import com.py.credit.entity.CswhObj;
import com.py.credit.entity.TreeObj;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface CswhDao {

    /**
     * 查询所有一级部门
     *
     * @return
     */
    List<Map<String, String>> selectDeptListForPage(@Param(value = "code") String code,
                                             @Param(value = "name") String name,
                                             @Param(value = "page") Page page);

    /**
     * 查询编码是否重复
     *
     * @param csbm
     * @param remark
     * @return
     */
    int selectSameCode(@Param(value = "csbm") String csbm,
                       @Param(value = "remark") String remark);

    /**
     * 添加措施
     *
     * @param id
     * @param jclb
     * @param cs
     * @param remark
     * @param yj
     * @param jczt
     * @param csbm
     * @param sort
     * @param csType
     */
    void add(@Param(value = "id") String id,
             @Param(value = "jclb") String jclb,
             @Param(value = "cs") String cs,
             @Param(value = "remark") String remark,
             @Param(value = "yj") String yj,
             @Param(value = "jczt") String jczt,
             @Param(value = "csbm") String csbm,
             @Param(value = "sort") int sort,
             @Param(value = "csType") String csType,
             @Param(value = "cssdValue") String cssdValue);

    /**
     * 查询部门下是否有措施
     *
     * @param type
     * @param deptId
     * @param csId
     * @param ids
     * @return
     */
    int selectDeptCsSameById(@Param(value = "type") String type,
                             @Param(value = "deptId") String deptId,
                             @Param(value = "csId") String csId,
                             @Param(value = "ids") List<String> ids,
                             @Param(value = "csType") String csType);

    /**
     * 添加措施部门关联
     *
     * @param deptId
     * @param csId
     */
    void insertCsDept(@Param(value = "deptId") String deptId,
                      @Param(value = "csId") String csId);

    /**
     * 修改时判断措施编码是否存在
     *
     * @param id
     * @param csbm
     * @param remark
     * @return
     */
    int selectOtherSameCode(@Param(value = "id") String id,
                            @Param(value = "csbm") String csbm,
                            @Param(value = "remark") String remark);

    /**
     * 修改措施
     *
     * @param id
     * @param cs
     * @param remark
     * @param yj
     * @param jczt
     * @param csbm
     * @param sort
     */
    void modify(@Param(value = "id") String id,
                @Param(value = "cs") String cs,
                @Param(value = "remark") String remark,
                @Param(value = "yj") String yj,
                @Param(value = "jczt") String jczt,
                @Param(value = "csbm") String csbm,
                @Param(value = "sort") int sort,
                @Param(value = "cssdValue") String cssdValue);

    /**
     * 查询规则绑定的措施
     *
     * @param id
     * @return
     */
    int selectBdGzCs(@Param(value = "id") String id);

    /**
     * 查询领域下是否有措施
     *
     * @param type
     * @param lyId
     * @param csId
     * @param ids
     * @return
     */
    int selectLyCsSameById(@Param(value = "type") String type,
                           @Param(value = "lyId") String lyId,
                           @Param(value = "csId") String csId,
                           @Param(value = "ids") List<String> ids,
                           @Param(value = "csType") String csType);

    /**
     * 删除措施
     *
     * @param ids
     * @param delFlag
     */
    void del(@Param(value = "ids") List<String> ids,
             @Param(value = "delFlag") String delFlag);

    /**
     * 通过id获取措施对象
     *
     * @param id
     * @return
     */
    CswhObj selectOneById(@Param(value = "id") String id);

    /**
     * 根据部门名称查询措施
     *
     * @param type
     * @param deptName
     * @return
     */
    List<CswhObj> selectCswhByDeptName(@Param(value = "type") String type,
                                       @Param(value = "deptName") String deptName);

    /**
     * 添加领域措施中间表
     *
     * @param lyId
     * @param csId
     */
    void insertCsLy(@Param(value = "lyId") String lyId,
                    @Param(value = "csId") String csId);

    /**
     * 删除领域措施
     *
     * @param ly
     * @param csList
     */
    void delCsLy(@Param(value = "ly") String ly,
                 @Param(value = "csList") List<String> csList);

    /**
     * 删除部门措施
     *
     * @param dept
     * @param csList
     */
    void delCsDept(@Param(value = "dept") String dept,
                   @Param(value = "csList") List<String> csList);

    /**
     * 通过领域id查询措施
     *
     * @param type
     * @return
     */
    List<CswhObj> selectCswhByLyId(@Param(value = "type") String type);

    /**
     * 获取添加规则页面措施列表
     *
     * @param id
     * @param jclb
     * @param csbm
     * @param remark
     * @param deptId
     * @param lyId
     * @param page
     * @return
     */
    List<CswhObj> getListForPage(@Param(value = "id") String id,
                                 @Param(value = "jclb") String jclb,
                                 @Param(value = "csbm") String csbm,
                                 @Param(value = "remark") String remark,
                                 @Param(value = "deptId") String deptId,
                                 @Param(value = "lyId") String lyId,
                                 @Param(value = "page") Page page);

    /**
     * 查询部门树
     *
     * @param name
     * @return
     */
    List<TreeObj> selectDeptTreeList(@Param(value = "name") String name);

    /**
     * 查询领域树
     *
     * @param name
     * @param type
     * @return
     */
    List<TreeObj> selectLyTreeList(@Param(value = "name") String name,
                                   @Param(value = "type") String type);

    /**
     * 通过规则id获取措施
     *
     * @param id
     * @return
     */
    List<CswhObj> selectByGzId(@Param(value = "id") String id);
}
